home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 288_01 / prtmtx.c < prev    next >
Text File  |  1989-05-23  |  6KB  |  149 lines

  1. /*
  2.         HEADER:         CUG000.13;
  3.         TITLE:          PrintMatrix (main), ArcCost, TSPOutput;
  4.         DATE:           Mar 89;
  5.         DESCRIPTION:    Prints Distance Matrix in Readable Format;
  6.         VERSION:        2.0;
  7.         FILENAME:       PRTMTX.C;
  8.         SEE-ALSO:       TSP.C, NN.C, POPT.C, 2OPT.C, HYBRID.C, 3OPT.C, FN.C,
  9.                         BOOLEAN.H, NODELIST.H, TSP.H,
  10.                         BLDMTX.C, TIME.C;
  11.         AUTHORS:        Kevin E. Knauss;
  12. */
  13.  
  14.  
  15. #include <stdio.h>
  16. #include <tsp.h>
  17.  
  18.  
  19.    unsigned Network[MAXROWS][MAXCOLS];
  20.  
  21.  
  22. /* This version of ArcCost to be used with complete matricies */
  23. unsigned ArcCost (FromIndex, ToIndex)
  24.    unsigned FromIndex, ToIndex;
  25. {
  26.    extern unsigned Network[MAXROWS][MAXCOLS];
  27.  
  28.    return (Network [FromIndex][ToIndex]);
  29. } /* ArcCost */
  30.  
  31.  
  32. main ()
  33. {
  34.    extern unsigned Network[MAXROWS][MAXCOLS];
  35.    char Names[MAXROWS][MAXLINE];
  36.    unsigned NumberOfVirteces;
  37.    unsigned CircuitCost, OrigCost;
  38.    unsigned count, index;
  39.    unsigned FirstIndex, SecondIndex;
  40.    char filename[MAXLINE], ValueString[MAXLINE];
  41.    long atol ();
  42.    FILE *fp;
  43.  
  44.    /* Input network to be printed */
  45.       printf("\n\n\n****************************************");
  46.       printf("\n\nInput filename for input: ");
  47.       if (gets(filename) == NULL) {
  48.          printf("\n*******************************************");
  49.          printf("\n   Execution Terminated At User Request!");
  50.          printf("\n*******************************************\n\n");
  51.          exit(-1);
  52.       }
  53.       printf("\n\nInput will be read from: %s\n\n", filename);
  54.       if ((fp = fopen (filename, "r")) == NULL) {
  55.          printf("\n*******************************************");
  56.          printf("\n   Execution Terminated - Invalid Open!");
  57.          printf("\n*******************************************\n\n");
  58.          exit(-1);
  59.       }
  60.       fscanf (fp, "%u", &NumberOfVirteces);
  61.       printf("\nVirteces = %u\n", NumberOfVirteces);
  62.       for ( index = 1; index <= NumberOfVirteces; index++) {
  63.          fscanf (fp, "%s", Names [index]);
  64.          printf("%2u -- %s\n", index, Names [index]);
  65.       }
  66.       for ( FirstIndex = 1; FirstIndex <= NumberOfVirteces; FirstIndex++) {
  67.          for ( SecondIndex = 1; SecondIndex <= NumberOfVirteces;
  68.                                                             SecondIndex++) {
  69.             fscanf (fp, "%s", ValueString);
  70.             Network [FirstIndex][SecondIndex] = (unsigned) atol (ValueString);
  71.             printf("%5u", Network[FirstIndex][SecondIndex]);
  72.          }
  73.          printf("\n");
  74.       }
  75.       fclose (fp);
  76.    /* Open output and print headers */
  77.       printf("\n\n\n****************************************");
  78.       printf("\n\nInput filename for output: ");
  79.       if (gets(filename) == NULL) {
  80.          printf("\n*******************************************");
  81.          printf("\n   Execution Terminated At User Request!");
  82.          printf("\n*******************************************\n\n");
  83.          exit(-1);
  84.       }
  85.       printf("\n\nOutput will be written to: %s\n\n", filename);
  86.       if (!strcmp(filename, "stdout"))
  87.          fp = stdout;
  88.       else
  89.          if ((fp = fopen (filename, "w")) == NULL) {
  90.             printf("\n*******************************************");
  91.             printf("\n   Execution Terminated - Invalid Open!");
  92.             printf("\n*******************************************\n\n");
  93.             exit(-1);
  94.          }
  95.       printf("\n   File opened.\n");
  96.       TSPOutput (fp, NumberOfVirteces);
  97.    /* Clean up and go */
  98.       fclose (fp);
  99.       printf("\n*******************************************");
  100.       printf("\n        Execution Terminated Normally!");
  101.       printf("\n*******************************************\n\n");
  102. } /* PrintMatrix - main */
  103.  
  104.  
  105. TSPOutput (fp, NumberOfVirteces)
  106.    FILE *fp;
  107.    unsigned NumberOfVirteces;
  108. {
  109.    unsigned ArcCost ();
  110.    unsigned Cost, index, FirstIndex, SecondIndex, Step, Last;
  111.  
  112.    printf("\n     Printing ...\n");
  113.    fprintf(fp, "\n          ");
  114.    fprintf(fp, "T R A V E L I N G   S A L E S M A N   P R O B L E M");
  115.    fprintf(fp, "\n\n\nCost data for the");
  116.    fprintf(fp, " %u city problem\n\n", NumberOfVirteces);
  117. /* Write MATRIX with labels */
  118.    for ( Step = 1; Step <= NumberOfVirteces; Step += 14) {
  119.       Last = Step + 13;
  120.       if (Last > NumberOfVirteces)
  121.          Last = NumberOfVirteces;
  122.       fprintf(fp, "    ");
  123.       for ( index = Step; index <= Last; index++)
  124.          fprintf(fp, "%5u", index);
  125.       fprintf(fp, "\n     ");
  126.       for ( index = Step; index <= Last; index++)
  127.          fprintf(fp, " ====");
  128.       fprintf(fp, "\n");
  129.       for ( FirstIndex = 1; FirstIndex <=  NumberOfVirteces; FirstIndex++) {
  130.          fprintf(fp, "%3u |", FirstIndex);
  131.          for ( SecondIndex = Step; SecondIndex <=  Last; SecondIndex++) {
  132.             Cost = ArcCost (FirstIndex, SecondIndex);
  133.             if ((FirstIndex != SecondIndex) && (Cost != MAXCARD))
  134.                fprintf(fp, "%5u", Cost);
  135.             else
  136.                fprintf(fp, "    X");
  137.          }
  138.          fprintf(fp, "\n");
  139.       }
  140.       fprintf(fp, "     ");
  141.       for ( index = Step; index <= Last; index++)
  142.          fprintf(fp, " ====");
  143.       fprintf(fp, "\n    ");
  144.       for ( index = Step; index <= Last; index++)
  145.          fprintf(fp, "%5u", index);
  146.       fprintf(fp, "\n\n\n\n\n");
  147.    }
  148. } /* TSPOutput */
  149.